// import com.alibaba.druid.DbType;
// import com.alibaba.druid.sql.ast.SQLCommentHint;
// import com.alibaba.druid.sql.ast.SQLExpr;
// import com.alibaba.druid.sql.ast.statement.SQLInsertStatement;
// import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.ArrayList;
// import java.util.List;
#pragma once
#include "../../../../ast/statement/SQLInsertStatement.h"

class MySqlInsertStatement : public SQLInsertStatement
{
public:
  BOOL_ptr lowPriority;
  BOOL_ptr delayed;
  BOOL_ptr highPriority;
  BOOL_ptr ignore;
  BOOL_ptr rollbackOnFail;
  BOOL_ptr fulltextDictionary; // for adb
  BOOL_ptr overwrite;          // for adb
  BOOL_ptr ifNotExists;        // for adb

  SQLCommentHint_list_ptr hints;

  SQLExpr_list_ptr duplicateKeyUpdate;

  MySqlInsertStatement();
  SHAREDOBJECT(MySqlInsertStatement);

  void cloneTo(MySqlInsertStatement_ptr x);

  SQLExpr_list_ptr getDuplicateKeyUpdate();

  BOOL_ptr isLowPriority();

  void setLowPriority(BOOL_ptr lowPriority);

  BOOL_ptr isDelayed();

  void setDelayed(BOOL_ptr delayed);

  BOOL_ptr isHighPriority();

  void setHighPriority(BOOL_ptr highPriority);

  BOOL_ptr isIgnore();

  void setIgnore(BOOL_ptr ignore);

  BOOL_ptr isRollbackOnFail();

  void setRollbackOnFail(BOOL_ptr rollbackOnFail);

  BOOL_ptr isFulltextDictionary();

  void setFulltextDictionary(BOOL_ptr fulltextDictionary);

  BOOL_ptr isIfNotExists();

  void setIfNotExists(BOOL_ptr ifNotExists);

  // @Override
  void accept0(SQLASTVisitor_ptr visitor);

  void accept0(MySqlASTVisitor_ptr visitor);

  int getHintsSize();

  SQLCommentHint_list_ptr getHints();

  void setHints(SQLCommentHint_list_ptr x);

  SQLObject_ptr clone();

  // @Override
  BOOL_ptr isOverwrite();

  // @Override
  void setOverwrite(BOOL_ptr overwrite);

  virtual string_ptr getClass() { return make_string_ptr("MySqlInsertStatement"); }
};
